[2025-07-08] XML

🦥 본문

XML

정의

eXtensible Markup Language. 데이터를 구조화하고 전송하기 위해 만들어진 마크업 언어

특징

  • 확장적 : 사용자가 직접 태그를 정의할 수 있음
  • 계층적 : 트리 형태의 계층적 구조를 통해 복잡한 데이터도 표현 가능.
    • 루트로 시작하여 자식 요소들이 있음
  • 독립적 : 시스템에 상관없이 동일한 형식으로 동작. 다른 시스템끼리 쉽게 데이터를 교환할 수 있음
  • 텍스트 기반 : 사람도 읽을 수 있는 유니코드 문자로만 이루어짐.

목적

  • 데이터 저장 : 구성 정보를 파일로 저장
  • 데이터 전송 : 환경에 독립적이기 때문에 데이터 주고받을 때 사용. 호환성 보장

구조

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<library>
  <book>
    <title>어린 왕자</title>
    <author>앙투안 드 생텍쥐페리</author>
    <year>1943</year>
    <price>12000</price>
  </book>
  <book>
    <title>해리 포터</title>
    <author>J.K. 롤링</author>
    <year>1997</year>
    <price>15000</price>
  </book>
</library>
  • 태그를 사용하여 XML 문서임을 명시. 선언부
    • version : XML 버전
    • encoding : XML 문서의 문자셋
    • standalone : 외부 DTD 문서의 의존 여부. Yes or NO

DTD

  • XML 문서의 구조, 요소, 속성이 어떤 식으로 배치되어야 하는지를 정의하는 문서
  • 예시) 내부 DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
  <!ELEMENT note (to, from, heading, body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
]>
<note>
  <to>윤서</to>
  <from>세은</from>
  <heading>안녕</heading>
  <body>오늘도 힘내!</body>
</note>
  • 예시) 외부 DTD
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>윤서</to>
  <from>세은</from>
  <heading>하이</heading>
  <body>잘자요~</body>
</note>

// note.dtd
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
  • 예시) XXE : 루트 요소는 data이며 DTD를 내부에 정의. xxe라는 엔티티를 정의하고 외부 파일 경로를 참조. 이후 XML 문서 본문에서 &xxe를 사용하면 해당 파일의 내용을 읽어와 삽입
<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data>

Categories:

Updated:

Leave a comment